Metode dan Simulasi Monte Carlo¶
Metode Monte Carlo¶
Metode Monte Carlo adalah algoritma komputasi untuk mensimulasikan berbagai perilaku sistem fisika dan matematika. Penggunaan klasik metode ini adalah untuk mengevaluasi integral definit, terutama integral multidimensi dengan syarat dan batasan yang rumit
Melihat dari cara kerjanya metode Monte Carlo merupakan metode yang memberikan segala kemungkinan nilai dari suatu variabel. Metode Monte Carlo merupakan metode yang memanfaatkan strong law of large number dalam melakukan perhitungan, artinya semakin banyak variabel acak yang digunakan akan semakin baik pula pendekatan nilai eksaknya
Algoritma dan contoh metode monte carlo¶
- Probabilitas pelemparan coin Ganda
Dari teori peluang akan muncul:
MM Î ¼ MB atau BM Î ½ BB Î ¼
Dengan metode Monte Carlo dapatkan tingkat ketelitian sampai 0.01 untuk menyelesaikan kasus tersebut….
Untuk mendapatkan ketelitian sampai 0,01 maka harus dilakukan pelemparan sebanyak 1000 (N_total) kali. Dari hasil pelemparan catat keluarnya angka-angka:
P(MM) = N(MM)/N_total
P(MB) = N(MB)/N_total
P(BB) = N(BB)/N_total
Algorithma¶
a. Bangkitkan nilai 0/1 sebanyak 1000 kali (N=1000) dengan cara: n1 =(int)rand()%2 dan n2 =(int)rand()%2
b. Klasifikasi Jika n1=0 dan n2=0, maka MM=MM+1 Jika n1=0 dan n2=1 atau n1=1 dan n2=0 maka MB=MB+1 Jika n1=1 dan n2=1, maka BB=BB+1
c. Hitung probabilitas MM dengan cara N(MM)/N dan probabilitas untuk nilai MB serta BB
2.Menghitung Nilai Integral dengan monte carlo
Luas area dicari = yang berwarna atau daerah dibawah garis fungsi f(x) = 2x
Dengan dasar pemikiran tersebut diperoleh suatu perbandingan:
BIla kita melakukan pelemparan coin sebanyak N kali, dan coin jatuh di bawah garis f(x) =2x sebanyak M kali. Maka:
tugas programing¶
implemenasi metode carlo dalam python¶
from scipy import random
import numpy as np
import matplotlib.pyplot as plt
a = 0
b = 2
N=2500
def func(x):
return (4-x**2)**0.5
area = []
for i in range(N):
xrand = np.zeros(N)
for i in range(len(xrand)):
xrand[i] = random.uniform(a,b)
integral = 0.0
for i in range(N):
integral+=func(xrand[i])
jawab = (b-a)/float(N)*integral
area.append(jawab)
plt.title("Hasil phi")
plt.hist(area,bins = 30, ec = 'black')
plt.xlabel("Area")
plt.show()
hasil running¶
from scipy import random
import numpy as np
a = -1
b = 1
N=100
xrand=np.zeros(N)
yrand=np.zeros(N)
zrand=np.zeros(N)
integral=0.0
for i in range(4):
for i in range(len(xrand)):
xrand[i]=random.uniform(a,b)
for i in range(len(yrand)):
yrand[i]=random.uniform(a,b)
for i in range(len(zrand)):
zrand[i]=random.uniform(a,b)
def func(x,y,z):
return (x**2)+(y**2)+(z**2)
for i in range(N):
integral+=func(xrand[i],yrand[i],zrand[i])
jawab=(b-a)/float(N)*integral
print("jawab: ",jawab)
hasil running¶
jawab: 7.941487167529855